package com.gaogzhen.algorithm.sort;

/**
 * 冒泡排序
 * 相邻2个元素比较大小，如果前面大，则交互2元素，直到序列结尾；
 * 重复上述步骤，直到不再发生交换数据
 */
public class Bubble {

    // 排序
    public static void sort(Comparable[] a) {
        for (int i = a.length - 1; i > 0; i --) {
            int count = 0;
            for (int j = 0; j < i; j++) {
                if (compare(a[j], a[j+1])) {
                    count++;
                    exch(a, j, j+1);
                }
            }
            if (count == 0) break;
        }
    }

    // 比较a是否大于b
    public static boolean compare(Comparable a, Comparable b) {
        return a.compareTo(b) > 0;
    }

    // 交换元素
    public static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}
